SCI-A가 아닌 포트 사용

앞서 "C2000 보드 세팅"에서 권장한 포트를 사용할 경우에만, easyDSP를 이용하여 부팅 및 모니터링을 모두 수행할 수 있습니다. 이는 MCU가 SCI-A로만 부팅 동작을 지원하기 때문입니다. 만약 SCI B 포트에 easyDSP를 연결한다면, 부팅이 지원되지 못하게 됩니다.
특별한 사유로 SCI-A 포트가 아닌 다른 포트를 easyDSP에 연결해야 할 경우, 하기의 방법을 통해 부팅 및 모니터링 모두 동작 가능하게 할 수 있습니다. 하기는 TMS320F28377D 경우를 설명하지만, 다른 MCU에도 동일한 방법이 적용 가능합니다.

easyDSP를 TMS320F28377D GPIO85, GPIO84가 아닌 다른 GPIO 포트에 연결하여 사용하고자 할 경우 제안 드리는 방법 :

부트롬에 의한 MCU 부팅은 GPIO85/GPIO84(SCI-A)에 연결할 경우에만 가능하며, 이로써 램 부팅 및 플래시 프로그래밍이 수행  가능합니다. 따라서 easyDSP를 다른 포트에 연결 사용할 경우 램 부팅 및 플래시 프로그래밍은 불가능하며, 모니터링만 가능하게 됩니다.
easyDSP를 GPIO85/GPIO84 포트에 연결하여 사용할 수 없는 경우라면 (예를 들어 EMIF 사용), 적절한 방법으로 상기 문제를 회피할 수 있습니다. 
일단 easyDSP GPIO85, GPIO84 에 연결하여 부팅한 후, 부팅 이후  사용자 프로그램에서 easyDSP의 결선을 다른 포트로 변경하는 것입니다. 결선을 바꾸기 위해서는 부가적인 하드웨어가 필요하며 하기를 참조하세요. Dual SPDT 스위치(NLAS4684 (Onsemi ),TS3A24159 (TI)) 또는 FPGA 를 사용합니다.

http://www.onsemi.com/pub_link/Collateral/NLAS4684-D.PDF

http://www.ti.com/lit/ds/symlink/ts3a24159.pdf

 

결선을 바꾸기 위해 부가적인 GPIOx가 할당되었습니다. 사용하지 않는 GPIO중 하나를 본 용도로 할당해 주십시오. 리셋 이후 부팅 동작 동안은 GPIOx가 입력단자(리셋 초기값)이므로 외부 풀업 저항에 의해 dual SPDT IN단자에 1이 입력되어 easyDSP 결선은 GPIO85/84에 연결됩니다. 이후 부팅을 완료한 후 사용자 프로그램에서 GPIOx를 출력단자로 설정하시고 값을 0으로 변경하여 easyDSP 결선을 다른 포트(회로에서는 GPIO28/29)로 할당하는 원리입니다.

결선을 바꾸는 시점 및 방법은 CPU1easyDSP_SCI_Init()에서 구현합니다. , easyDSP_SCI_Init()의 기존 해당 부위를 적절히 수정합니다.

원래 CPU1 easyDSP_SCI_Init()의 하기 부분을

        ///////////////////////////////////////////

        // SCI-A GPIO setting : SCIRXDA = GPIO 85, SCITXDA = GPIO84

        ///////////////////////////////////////////

        GPIO_SetupPinMux(84, GPIO_MUX_CPU1, 5);

        GPIO_SetupPinMux(85, GPIO_MUX_CPU1, 5);

        GPIO_SetupPinOptions(84, GPIO_OUTPUT, GPIO_ASYNC);

        GPIO_SetupPinOptions(85, GPIO_INPUT, GPIO_ASYNC);

        EALLOW;

        GpioCtrlRegs.GPCPUD.bit.GPIO85 = 0;         

        GpioCtrlRegs.GPCPUD.bit.GPIO84 = 0;          

        EDIS;

아래와 같이 변경합니다 (GPIO28/29 그리고 GPIO31을 사용할 경우)

        ///////////////////////////////////////////

        // SCI-A GPIO setting : SCIRXDA = GPIO 28, SCITXDA = GPIO29

        ///////////////////////////////////////////

        GPIO_SetupPinMux(29, GPIO_MUX_CPU1, 1);

        GPIO_SetupPinMux(28, GPIO_MUX_CPU1, 1);

        GPIO_SetupPinOptions(29, GPIO_OUTPUT, GPIO_ASYNC);

        GPIO_SetupPinOptions(28, GPIO_INPUT, GPIO_ASYNC);

        EALLOW;

        GpioCtrlRegs.GPCPUD.bit.GPIO28 = 0;         

        GpioCtrlRegs.GPCPUD.bit.GPIO29 = 0;          

           EDIS;

        // easyDSP 포트를 GPIO28/29 연결 (GPIO31 사용하여)

        GPIO_SetupPinMux(31, GPIO_MUX_CPU1, 0);

        GPIO_SetupPinOptions(31, GPIO_OUTPUT, GPIO_PUSHPULL);

           GPIO_WritePin(31, 0);

마지막으로 GPIO72핀도 EMIF에서 사용되므로 easyDSP 포드의 #5핀 상태도 고려해야 합니다. 해당 핀은 유사 오픈 컬렉터 출력 타입이므로, 부팅시에만 Low값이 출력 된 후 이후에는 오픈 상태가 유지됩니다. 따라서 해당 핀을 EMIF로 사용하는 데에 추가적인 고려 사항은 없습니다. 단, GPIO72핀이 easyDSP 포드에 연결되어 있으므로, MCU 동작시 easyDSP 포드를 찰탈착하는 것은 의도치 않은 노이즈 신호를 만들 수 있으므로 금지합니다.

Get mode 사용의 제한점 :

또 다른 방식으로는 Get ModeSCI BOOT 1 을 사용할 수 있습니다. , 이 경우 Zx-BOOTCTRL 레지스터를 변경하여야 합니다Zx-BOOTCTRL 레지스터는 OTP영역이므로 한번 고정하면 바꿀 없으며, Flash booting이 불가능하게 됩니다.